package view;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import model.Bank;
import model.Person;
@SuppressWarnings("serial")
public class SpendingAccountsView extends JFrame implements ActionListener {
private ArrayList<Object> accounts;
private JTable table, jT;
private DefaultTableModel tableModel;
private JScrollPane scrollPane;
private Object[][] rows;
private String[] columns;
private JPanel operations;
private JButton removeAccount;
private Bank bank;
private Person person;
public SpendingAccountsView(Person person, ArrayList<Object> accounts) {
this.setTitle("Accounts data");
this.setSize(400, 600);
this.accounts = accounts;
this.person = person;
jT = new JTable();
bank = Bank.getInstance();
initializeNorthSection();
removeAccount = new JButton("Remove account");
removeAccount.addActionListener(this);
operations = new JPanel();
operations.add(removeAccount);
this.add(operations, BorderLayout.SOUTH);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.setVisible(true);
}
private void initializeNorthSection() {
table = createGeneralTable(accounts);
scrollPane = new JScrollPane(table);
this.add(scrollPane, BorderLayout.NORTH);
}
private JTable createGeneralTable(Collection<Object> data) {
int listLength;
if (data == null) {
return null;
}
Object[] list = data.toArray();
if (list.length != 0) {
Field[] fields = list[0].getClass().getDeclaredFields();
Field.setAccessible(fields, true);
rows = new Object[list.length][fields.length - 1];
Object[] row = new Object[fields.length - 1];
columns = new String[fields.length - 1];
int i = 0;
for (Field field : fields) {
if (i == columns.length) {
break;
}
columns[i++] = field.getName();
}
tableModel = new DefaultTableModel(rows, columns);
tableModel.setRowCount(0);
jT.setModel(tableModel);
jT.setEnabled(false);
listLength = list.length;
for (i = 0; i < listLength; i++) {
int j = 0;
for (Field field : fields) {
if (j == row.length) {
break;
}
try {
Object fieldValue = field.get(list[i]);
row[j++] = fieldValue;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
tableModel.addRow(row);
}
}
return jT;
}
private void updateTable() {
table = createGeneralTable(bank.getPersonSpendingAccounts(person));
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == removeAccount) {
String name = JOptionPane.showInputDialog(this, "Give the name of the account.", "Account name",
JOptionPane.INFORMATION_MESSAGE);
Double money = Double.valueOf(JOptionPane.showInputDialog(this, "Give the money of the account.", "Money",
JOptionPane.INFORMATION_MESSAGE));
bank.removeHolderAssociatedAccount(person, bank.getAccount(person, name, money));
updateTable();
}
}
}